﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Contracts.DAL;
using DTO;
using DTO.Projectos;
using System.Threading;



namespace DAL
{
    public class Repositorio : IRepositorio
    {
        private static List<Projecto> listaProjectos = new List<Projecto>();
        private static int projectId = 0;
        private static object _lock = new object();

        public IEnumerable<Projecto> ObterProjectos(Estados estado, ProjectType projectType)
        {

            Type t = null;
            switch (projectType)
            {
                case ProjectType.Incentivos: t = typeof(Incentivos); break;
                case ProjectType.Bonificacoes: t = typeof(Bonificacoes); break;
            }

            if (t != null)
                return from proj in listaProjectos
                       where proj.EstadoActual == estado && proj.GetType() == t
                       select proj;


            return from proj in listaProjectos
                   where proj.EstadoActual == estado
                   select proj;
        }

        public IEnumerable<Projecto> ObterProjectos()
        {
            return listaProjectos;
        }

        public Projecto ObterProjecto(int idProjecto)
        {
            lock (_lock)
            {
                return listaProjectos.Where(p => p.ID == idProjecto).FirstOrDefault() as Projecto;
            }
        }

        public void AdicionaProjecto(Projecto projecto)
        {
            lock (_lock)
            {
                projecto.ID = Interlocked.Increment(ref projectId);
                listaProjectos.Add(projecto);
            }
        }

        public void AlteraProjecto(Projecto projecto)
        {
            lock (_lock)
            {
                int idx = listaProjectos.FindIndex(p => p.ID == projecto.ID);
                listaProjectos.RemoveAt(idx);
                listaProjectos.Insert(idx, projecto);
            }
        }
    }
}
